package com.xcf.cloud.codesvc.controller;


import com.xcf.cloud.codeapi.CodeConstant;
import com.xcf.cloud.codesvc.service.ICodeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author xiaocf
 */
@CrossOrigin(origins = "http://www.test.com:8000")
@RestController
@RequestMapping(CodeConstant.SERVICE_CONTEXT_PATH)
public class CodeController {

    @Autowired
    private ICodeService codeService;

    /**
     * ⽣成验证码并发送到对应邮箱，
     * 3）在注册⻚⾯，需要⽤户输⼊邮箱地址、密码、确认密码，然后点击”获取验证码“，系统会⽣成验证码
     * 并向所输⼊的邮箱地址发送该验证码，⽤户拿到邮箱中的验证码输⼊后完成注册
     * 规则如下
     * A：⼀分钟内只允许获取⼀次验证码（前端Js控制即可），验证码为随机⽣成的6位数字，10分钟内有
     * 效，验证码存储到mysql数据库中（因为⼤家未系统学习Redis，所以此处令牌存⼊数据库即可）； B：存储到mysql数据库之后，使⽤发邮件功能，将该验证码
     * C：⽤户从邮箱中拿到验证码，点击注册时，需要进⾏校验，因为验证码已经存⼊数据库，此时只需要
     * 查询数据库中该邮箱地址对应的最近⼀次的验证码记录，校验验证码是否正确，是否超时，若有问题，
     * 准确提示给⽤户
     * @param email 邮箱地址
     * @return 成功true, 失败 false
     */
    @GetMapping(CodeConstant.Path.GET_CODE_BY_EMAIL)
    public boolean getCode(@PathVariable("email") String email) {
        return codeService.makeAndSendCode(email);
    }

    /**
     * 校验验证码是否正确，0正确1错误2超时
     *
     * @param email 邮箱地址
     * @param code  验证码
     * @return 0正确1错误2超时
     */
    @GetMapping(CodeConstant.Path.VALID_CODE_BY_EMAIL)
    public Integer validCode(@PathVariable("email") String email, @PathVariable("code") String code) {
        return codeService.validCode(email, code);
    }
}
